﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mapeo;
using NHibernate;

namespace BE
{
    public class OperacionesNotas : Controlador
    {

        public List<ListadoSemestres> ObtenerListadodeSemestreAlumnos(String codigo)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                ITransaction trans = Sesion.BeginTransaction();
                IQuery query = (IQuery)Sesion.GetNamedQuery("sp_ObtenerSemestresAlumno");
                query.SetParameter("inCodigo", codigo);
                query.SetResultTransformer(
    new NHibernate.Transform.AliasToBeanConstructorResultTransformer(
    typeof(ListadoSemestres).GetConstructors()[1]));
                return query.List<ListadoSemestres>() as List<ListadoSemestres>;
            }
        }



        public List<ListadoCursosAlumno> ObtenerListadoCursosAlumno(String codigo)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                ITransaction trans = Sesion.BeginTransaction();
                IQuery query = (IQuery)Sesion.GetNamedQuery("sp_ObtenerCursosAlumno");
                query.SetParameter("inCodigo", codigo);
                query.SetResultTransformer(
    new NHibernate.Transform.AliasToBeanConstructorResultTransformer(
    typeof(ListadoCursosAlumno).GetConstructors()[1]));
                return query.List<ListadoCursosAlumno>() as List<ListadoCursosAlumno>;
            }
        }


        public List<ListadoCiclos> ObtenerListadoCiclosAlumnos(String codigo)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                ITransaction trans = Sesion.BeginTransaction();
                IQuery query = (IQuery)Sesion.GetNamedQuery("sp_ObtenerCiclosAlumno");
                query.SetParameter("inCodigo", codigo);
                query.SetResultTransformer(
    new NHibernate.Transform.AliasToBeanConstructorResultTransformer(
    typeof(ListadoCiclos).GetConstructors()[1]));
                return query.List<ListadoCiclos>() as List<ListadoCiclos>;
            }
        }


        public List<ListadoNotasDeAlumno> ObtenerListadoNotasAlumnos(String CopdigoAlumno,String filtro)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                ITransaction trans = Sesion.BeginTransaction();
                IQuery query = (IQuery)Sesion.GetNamedQuery("sp_ListadoNotasDeAlumno");
                query.SetParameter("Filtro", filtro);
                query.SetParameter("inCodigoAlumno", CopdigoAlumno);
                query.SetResultTransformer(
    new NHibernate.Transform.AliasToBeanConstructorResultTransformer(
    typeof(ListadoNotasDeAlumno).GetConstructors()[1]));
                return query.List<ListadoNotasDeAlumno>() as List<ListadoNotasDeAlumno>;
            }
        }


        public Nota RecuperarNotaxID(String ID) {
            Nota nota;
            nota = (Nota)AyudaNHibernate.ObtenerEntidadPorID("Nota",ID);
            return nota;
        }


        public NotaComplementaria RecuperarNotaComplementariaxID(String ID)
        {
            NotaComplementaria nota;
            nota = (NotaComplementaria)AyudaNHibernate.ObtenerEntidadPorID("NotaComplementaria", ID);
            return nota;                                                    
        }




        public void ActualizarNota(NotaComplementaria notaComplementaria, Nota nota)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                using (ITransaction Trans = Sesion.BeginTransaction())
                {
                    try
                    {
                        Sesion.Update(notaComplementaria);
                        Sesion.Update(nota);
                        Trans.Commit();
                    }
                    catch (Exception)
                    {

                        Trans.Rollback();
                    }
                }
            }

        }



        public void EliminarNota(NotaComplementaria notaComplementaria, Nota nota)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                using (ITransaction Trans = Sesion.BeginTransaction())
                {
                    try
                    {
                        Sesion.Delete(notaComplementaria);
                        Sesion.Delete(nota);
                        Trans.Commit();
                    }
                    catch (Exception)
                    {

                        Trans.Rollback();
                    }
                }
            }

        }


        public void ActualizarPeriodo(Nota nota,Int32 ciclo)
        {
            using (ISession Sesion = m_SessionFactory.OpenSession())
            {
                using (ITransaction Trans = Sesion.BeginTransaction())
                {
                    try
                    {
                        IQuery query = (IQuery)Sesion.GetNamedQuery("Cursor_Actulizar_Periodos");
                        query.SetParameter("In_Ciclo", ciclo);
                        query.SetParameter("In_CodigoAlumno", nota.Alumno.ID);
                        query.SetParameter("In_Especialidad", nota.Especialidad.ID);
                        query.List();
                        Trans.Commit();
                    }
                    catch (Exception)
                    {
                        Trans.Rollback();
                        throw;
                    }
                }
            }
        }

        //public void ActualizarFlagNotas()
        //{
        //    using (ISession Sesion = m_SessionFactory.OpenSession())
        //    {
        //        using (ITransaction Trans = Sesion.BeginTransaction())
        //        {
        //            try
        //            {
        //                IQuery query = (IQuery)Sesion.GetNamedQuery("ActulizaFlagNotas");
        //                query.List();
        //                Trans.Commit();
        //            }
        //            catch (Exception)
        //            {
        //                Trans.Rollback();
        //                throw;
        //            }

        //        }
        //    }
        //}




    }
}
